React ã®ãããæŽæ°ãšãäºæž¬å¯èœã§ä¿å®æ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ã®ããã®å¹æçãªããŒãžããžãã¯ã䜿çšããç¶æ 倿Žã®ç«¶å解決ã«ã€ããŠæ·±ãæãäžããŸãã
React ãããæŽæ°ã®ç«¶å解決ïŒç¶æ 倿Žã®ããŒãžããžãã¯
React ã®å¹ççãªã¬ã³ããªã³ã°ã¯ãç¶æ æŽæ°ããããåŠçããèœåã«å€§ããäŸåããŠããŸããããã¯ãåãã€ãã³ãã«ãŒããµã€ã¯ã«å ã§ããªã¬ãŒãããè€æ°ã®ç¶æ æŽæ°ãã°ã«ãŒãåãããåäžã®åã¬ã³ããªã³ã°ã§é©çšãããããšãæå³ããŸããããã«ããããã©ãŒãã³ã¹ã¯å€§å¹ ã«åäžããŸãããéåææäœãè€éãªç¶æ äŸåé¢ä¿ãæ±ãå Žåãæ³šæããŠåŠçããªããšäºæããªãåäœã«ã€ãªããå¯èœæ§ããããŸãããã®èšäºã§ã¯ãReact ã®ãããæŽæ°ã®è€éããæ¢ãã广çãªããŒãžããžãã¯ã䜿çšããŠç¶æ 倿Žã®ç«¶åã解決ããããã®å®è·µçãªæŠç¥ãæäŸããäºæž¬å¯èœã§ä¿å®æ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ãä¿èšŒããŸãã
React ã®ãããæŽæ°ã®çè§£
ãããåŠçã¯ããã®æ žå¿ã«ãããŠæé©åææ³ã§ããReact ã¯ãçŸåšã®ã€ãã³ãã«ãŒãå
ã®ãã¹ãŠã®åæã³ãŒããå®è¡ããããŸã§åã¬ã³ããªã³ã°ãå»¶æããŸããããã«ãããäžèŠãªåã¬ã³ããªã³ã°ã鲿¢ãããããã¹ã ãŒãºãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«è²¢ç®ããŸããã³ã³ããŒãã³ãã®ç¶æ
ãæŽæ°ããäž»èŠãªã¡ã«ããºã ã§ãã setState 颿°ã¯ãç¶æ
ãå³åº§ã«å€æŽããŸããã代ããã«ãåŸã§é©çšãããæŽæ°ããã¥ãŒã«å
¥ããŸãã
ãããåŠçã®ä»çµã¿ïŒ
setStateãåŒã³åºããããšãReact ã¯æŽæ°ããã¥ãŒã«è¿œå ããŸãã- ã€ãã³ãã«ãŒãã®æåŸã«ãReact ã¯ãã¥ãŒãåŠçããŸãã
- React ã¯ããã¥ãŒã«å ¥ãããããã¹ãŠç¶æ æŽæ°ãåäžã®æŽæ°ã«ããŒãžããŸãã
- ã³ã³ããŒãã³ãã¯ãããŒãžãããç¶æ ãšãšãã«åã¬ã³ããªã³ã°ãããŸãã
ãããåŠçã®å©ç¹ïŒ
- ããã©ãŒãã³ã¹æé©åïŒåã¬ã³ããªã³ã°ã®åæ°ãæžãããããé«éã§å¿çæ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ã«ã€ãªãããŸãã
- äžè²«æ§ïŒã³ã³ããŒãã³ãã®ç¶æ ãäžè²«ããŠæŽæ°ãããããšãä¿èšŒããäžéç¶æ ãã¬ã³ããªã³ã°ãããã®ãé²ããŸãã
課é¡ïŒç¶æ 倿Žã®ç«¶å
ãããæŽæ°ããã»ã¹ã¯ãè€æ°ã®ç¶æ
æŽæ°ãåã®ç¶æ
ã«äŸåããŠããå Žåã«ç«¶åãåŒãèµ·ããå¯èœæ§ããããŸããåãã€ãã³ãã«ãŒãå
ã§ 2 ã€ã® setState åŒã³åºããè¡ãããäž¡æ¹ãã«ãŠã³ã¿ãŒã®ã€ã³ã¯ãªã¡ã³ãã詊ã¿ãã·ããªãªãèããŠã¿ãŠãã ãããäž¡æ¹ã®æŽæ°ãåãåæç¶æ
ã«äŸåããŠããå Žåã2 çªç®ã®æŽæ°ãæåã®æŽæ°ãäžæžãããæçµç¶æ
ãäžæ£ç¢ºã«ãªãå¯èœæ§ããããŸãã
äŸïŒ
import React, { useState } from 'react';
function Counter() {
const [count, setCount] = useState(0);
const handleClick = () => {
setCount(count + 1); // æŽæ° 1
setCount(count + 1); // æŽæ° 2
};
return (
Count: {count}
);
}
export default Counter;
äžèšã®äŸã§ã¯ããIncrementããã¿ã³ãã¯ãªãã¯ããŠããã«ãŠã³ã㯠2 ã§ã¯ãªã 1 ããã€ã³ã¯ãªã¡ã³ããããªãå ŽåããããŸããããã¯ãäž¡æ¹ã® setCount åŒã³åºããåãåæ count å€ (0) ãåãåããããã 1 ã«ã€ã³ã¯ãªã¡ã³ãããæ¬¡ã« React ã 2 çªç®ã®æŽæ°ãé©çšããŠãäºå®äžæåã®æŽæ°ãäžæžãããããã§ãã
颿°åæŽæ°ã«ããç¶æ 倿Žã®ç«¶åã®è§£æ±º
ç¶æ
倿Žã®ç«¶åãåé¿ããæãä¿¡é Œæ§ã®é«ãæ¹æ³ã¯ãsetState ã§é¢æ°åæŽæ°ã䜿çšããããšã§ãã颿°åæŽæ°ã¯ãæŽæ°é¢æ°å
ã§åã®ç¶æ
ãžã®ã¢ã¯ã»ã¹ãæäŸããåæŽæ°ãææ°ã®ç¶æ
å€ã«åºã¥ããŠããããšãä¿èšŒããŸãã
颿°åæŽæ°ã®ä»çµã¿ïŒ
æ°ããç¶æ
å€ãçŽæ¥ setState ã«æž¡ã代ããã«ãåã®ç¶æ
ãåŒæ°ãšããŠåãåããæ°ããç¶æ
ãè¿ã颿°ãæž¡ããŸãã
æ§æïŒ
setState((prevState) => newState);
颿°åæŽæ°ã䜿çšããæ¹èšçäŸïŒ
import React, { useState } from 'react';
function Counter() {
const [count, setCount] = useState(0);
const handleClick = () => {
setCount((prevCount) => prevCount + 1); // 颿°åæŽæ° 1
setCount((prevCount) => prevCount + 1); // 颿°åæŽæ° 2
};
return (
Count: {count}
);
}
export default Counter;
ãã®æ¹èšçã®äŸã§ã¯ãå setCount åŒã³åºãã¯ãæ£ããåã®ã«ãŠã³ãå€ãåãåããŸããæåã®æŽæ°ã¯ã«ãŠã³ãã 0 ãã 1 ã«ã€ã³ã¯ãªã¡ã³ãããŸããæ¬¡ã«ã2 çªç®ã®æŽæ°ã¯æŽæ°ãããã«ãŠã³ãå€ 1 ãåãåããããã 2 ã«ã€ã³ã¯ãªã¡ã³ãããŸããããã«ããããã¿ã³ãã¯ãªãã¯ããããã³ã«ã«ãŠã³ããæ£ããã€ã³ã¯ãªã¡ã³ããããããšãä¿èšŒãããŸãã
颿°åæŽæ°ã®å©ç¹
- æ£ç¢ºãªç¶æ æŽæ°ïŒæŽæ°ãææ°ã®ç¶æ ã«åºã¥ããŠããããšãä¿èšŒããç«¶åãé²ããŸãã
- äºæž¬å¯èœãªåäœïŒç¶æ æŽæ°ãããäºæž¬å¯èœã§ãçè§£ããããããŸãã
- éåæå®å šæ§ïŒè€æ°ã®æŽæ°ãåæã«ããªã¬ãŒãããå Žåã§ããé忿޿°ãæ£ããåŠçããŸãã
è€éãªç¶æ æŽæ°ãšããŒãžããžãã¯
è€éãªç¶æ ãªããžã§ã¯ããæ±ãå ŽåãããŒã¿æŽåæ§ãç¶æããã«ã¯é¢æ°åæŽæ°ãäžå¯æ¬ ã§ããç¶æ ã®äžéšãçŽæ¥äžæžãããã®ã§ã¯ãªããæ°ããç¶æ ãšæ¢åã®ç¶æ ãæ³šææ·±ãããŒãžããå¿ èŠããããŸãã
äŸïŒãªããžã§ã¯ãããããã£ã®æŽæ°
import React, { useState } from 'react';
function UserProfile() {
const [user, setUser] = useState({
name: 'John Doe',
age: 30,
address: {
city: 'New York',
country: 'USA',
},
});
const handleUpdateCity = () => {
setUser((prevUser) => ({
...prevUser,
address: {
...prevUser.address,
city: 'London',
},
}));
};
return (
Name: {user.name}
Age: {user.age}
City: {user.address.city}
Country: {user.address.country}
);
}
export default UserProfile;
ãã®äŸã§ã¯ãhandleUpdateCity 颿°ã¯ãŠãŒã¶ãŒã®éœåžãæŽæ°ããŸããã¹ãã¬ããæŒç®å (...) ã䜿çšããŠãåã®ãŠãŒã¶ãŒãªããžã§ã¯ããšåã®äœæãªããžã§ã¯ãã®æµ
ãã³ããŒãäœæããŸããããã«ãããcity ããããã£ã®ã¿ãæŽæ°ãããä»ã®ããããã£ã¯å€æŽãããªããŸãŸã«ãªããŸããã¹ãã¬ããæŒç®åããªãå Žåãç¶æ
ããªãŒã®äžéšãå®å
šã«äžæžãããããšã«ãªããããŒã¿æå€±ã«ã€ãªãããŸãã
äžè¬çãªããŒãžããžãã¯ãã¿ãŒã³
- æµ
ãããŒãžïŒã¹ãã¬ããæŒç®å (
...) ã䜿çšããŠæ¢åã®ç¶æ ã®æµ ãã³ããŒãäœæããæ¬¡ã«ç¹å®ã®ããããã£ãäžæžãããŸããããã¯ããã¹ãããããªããžã§ã¯ããæ·±ãæŽæ°ããå¿ èŠããªãåçŽãªç¶æ æŽæ°ã«é©ããŠããŸãã - ãã£ãŒãããŒãžïŒæ·±ããã¹ãããããªããžã§ã¯ãã®å Žåã¯ãLodash ã®
_.mergeãimmerã®ãããªã©ã€ãã©ãªã䜿çšããŠãã£ãŒãããŒãžãå®è¡ããããšãæ€èšããŠãã ããããã£ãŒãããŒãžã¯ãªããžã§ã¯ããååž°çã«ããŒãžãããã¹ããããããããã£ãæ£ããæŽæ°ãããããšãä¿èšŒããŸãã - ã€ãã¥ãŒã¿ããªãã£ãã«ããŒïŒ
immerã®ãããªã©ã€ãã©ãªã¯ãã€ãã¥ãŒã¿ãã«ããŒã¿ã§äœæ¥ããããã®ãã¥ãŒã¿ãã« API ãæäŸããŸããç¶æ ã®ãã©ããã倿Žã§ããimmerã¯å€æŽãå«ãæ°ããã€ãã¥ãŒã¿ãã«ç¶æ ãªããžã§ã¯ããèªåçã«çæããŸãã
é忿޿°ãšç«¶åç¶æ
API åŒã³åºããã¿ã€ã ã¢ãŠããªã©ã®éåææäœã¯ãç¶æ æŽæ°ãæ±ãéã«ãããªãè€éããå°å ¥ããŸããè€æ°ã®éåææäœãåæã«ç¶æ ãæŽæ°ããããšãããšç«¶åç¶æ ãçºçããå¯èœæ§ããããäžè²«æ§ã®ãªãããŸãã¯äºæããªãçµæã«ã€ãªããå¯èœæ§ããããŸãã颿°åæŽæ°ã¯ããããã®ã·ããªãªã§ç¹ã«éèŠã§ãã
äŸïŒããŒã¿ã®ååŸãšç¶æ ã®æŽæ°
import React, { useState, useEffect } from 'react';
function DataFetcher() {
const [data, setData] = useState(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
useEffect(() => {
const fetchData = async () => {
try {
const response = await fetch('https://api.example.com/data');
if (!response.ok) {
throw new Error('Failed to fetch data');
}
const jsonData = await response.json();
setData(jsonData); // åæããŒã¿ããŒã
} catch (error) {
setError(error);
} finally {
setLoading(false);
}
};
fetchData();
}, []);
// ã·ãã¥ã¬ãŒããããããã¯ã°ã©ãŠã³ãæŽæ°
useEffect(() => {
if (data) {
const intervalId = setInterval(() => {
setData((prevData) => ({
...prevData,
updatedAt: new Date().toISOString(),
}));
}, 5000);
return () => clearInterval(intervalId);
}
}, [data]);
if (loading) {
return Loading...
;
}
if (error) {
return Error: {error.message}
;
}
return (
Data: {JSON.stringify(data)}
);
}
export default DataFetcher;
ãã®äŸã§ã¯ãã³ã³ããŒãã³ã㯠API ããããŒã¿ãååŸããååŸããããŒã¿ã§ç¶æ
ãæŽæ°ããŸããããã«ãuseEffect ããã¯ã¯ã5 ç§ããšã« updatedAt ããããã£ã倿Žããããã¯ã°ã©ãŠã³ãæŽæ°ãã·ãã¥ã¬ãŒãããŸãã颿°åæŽæ°ã¯ãããã¯ã°ã©ãŠã³ãæŽæ°ã API ããååŸããææ°ã®ããŒã¿ã«åºã¥ããŠããããšãä¿èšŒããããã«äœ¿çšãããŸãã
é忿޿°ã®åŠçæŠç¥
- 颿°åæŽæ°ïŒåè¿°ã®ããã«ã颿°åæŽæ°ã䜿çšããŠãç¶æ æŽæ°ãææ°ã®ç¶æ å€ã«åºã¥ããŠããããšãä¿èšŒããŸãã
- ãã£ã³ã»ã«ïŒã³ã³ããŒãã³ãã®ã¢ã³ããŠã³ãæããŸãã¯ããŒã¿ãäžèŠã«ãªã£ããšãã«ãä¿çäžã®éåææäœããã£ã³ã»ã«ããŸããããã«ãããç«¶åç¶æ
ãã¡ã¢ãªãªãŒã¯ãé²ãããšãã§ããŸãã
AbortControllerAPI ã䜿çšããŠéåæãªã¯ãšã¹ãã管çããå¿ èŠã«å¿ããŠãã£ã³ã»ã«ããŸãã - ãããŠã³ã¹ãšã¹ãããã«ïŒãããŠã³ã¹ãŸãã¯ã¹ãããã«ææ³ã䜿çšããŠãç¶æ æŽæ°ã®é »åºŠãå¶éããŸããããã«ãããéå°ãªåã¬ã³ããªã³ã°ãé²ããããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã Lodash ã®ãããªã©ã€ãã©ãªã¯ããããŠã³ã¹ãšã¹ãããã«ã®äŸ¿å©ãªé¢æ°ãæäŸããŸãã
- ç¶æ 管çã©ã€ãã©ãªïŒå€æ°ã®éåææäœãããè€éãªã¢ããªã±ãŒã·ã§ã³ã®å Žåã¯ãReduxãZustandããŸã㯠Recoil ã®ãããªç¶æ 管çã©ã€ãã©ãªã®äœ¿çšãæ€èšããŠãã ããããããã®ã©ã€ãã©ãªã¯ãç¶æ ã管çããé忿޿°ãåŠçããããã®ãããæ§é åãããäºæž¬å¯èœãªæ¹æ³ãæäŸããŸãã
ç¶æ æŽæ°ããžãã¯ã®ãã¹ã
ã¢ããªã±ãŒã·ã§ã³ãæ£ããåäœããããšãä¿èšŒããã«ã¯ãç¶æ æŽæ°ããžãã¯ã培åºçã«ãã¹ãããããšãäžå¯æ¬ ã§ããåäœãã¹ãã¯ãããŸããŸãªæ¡ä»¶äžã§ç¶æ æŽæ°ãæ£ããå®è¡ãããããšã確èªããã®ã«åœ¹ç«ã¡ãŸãã
äŸïŒã«ãŠã³ã¿ãŒã³ã³ããŒãã³ãã®ãã¹ã
import React from 'react';
import { render, fireEvent } from '@testing-library/react';
import Counter from './Counter';
test('increments the count by 2 when the button is clicked', () => {
const { getByText } = render( );
const incrementButton = getByText('Increment');
fireEvent.click(incrementButton);
expect(getByText('Count: 2')).toBeInTheDocument();
});
ãã®ãã¹ãã¯ããã¿ã³ãã¯ãªãã¯ããããšãã« Counter ã³ã³ããŒãã³ããã«ãŠã³ãã 2 ãã€ã€ã³ã¯ãªã¡ã³ãããããšã確èªããŸãã @testing-library/react ã©ã€ãã©ãªã䜿çšããŠã³ã³ããŒãã³ããã¬ã³ããªã³ã°ãããã¿ã³ãèŠã€ããã¯ãªãã¯ã€ãã³ããã·ãã¥ã¬ãŒãããã«ãŠã³ããæ£ããæŽæ°ãããããšãã¢ãµãŒãããŸãã
ãã¹ãæŠç¥
- åäœãã¹ãïŒåã ã®ã³ã³ããŒãã³ãã®åäœãã¹ããèšè¿°ããŠãç¶æ æŽæ°ããžãã¯ãæ£ããæ©èœããŠããããšã確èªããŸãã
- çµ±åãã¹ãïŒç°ãªãã³ã³ããŒãã³ããæ£ããçžäºäœçšããç¶æ ãæåŸ ã©ããã«ã³ã³ããŒãã³ãéã§æž¡ãããããšã確èªããããã«çµ±åãã¹ããèšè¿°ããŸãã
- ãšã³ãããŒãšã³ããã¹ãïŒã¢ããªã±ãŒã·ã§ã³å šäœããŠãŒã¶ãŒã®èгç¹ããæ£ããæ©èœããŠããããšã確èªããããã«ãšã³ãããŒãšã³ããã¹ããèšè¿°ããŸãã
- ã¢ãã¯ïŒã³ã³ããŒãã³ããåé¢ãããã®åäœãåç¬ã§ãã¹ãããããã«ã¢ãã¯ã䜿çšããŸãã API åŒã³åºãããã®ä»ã®å€éšäŸåé¢ä¿ãã¢ãã¯ããŠãç°å¢ãå¶åŸ¡ããç¹å®ã®ã·ããªãªããã¹ãããŸãã
ããã©ãŒãã³ã¹ã®èæ ®äºé
ãããåŠçã¯äž»ã«ããã©ãŒãã³ã¹æé©åææ³ã§ãããç¶æ æŽæ°ã®ç®¡çãäžååã ãšããã©ãŒãã³ã¹ã®åé¡ãçºçããå¯èœæ§ããããŸããéå°ãªåã¬ã³ããªã³ã°ãäžèŠãªèšç®ã¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«æªåœ±é¿ãäžããå¯èœæ§ããããŸãã
ããã©ãŒãã³ã¹æé©åæŠç¥
- ã¡ã¢åïŒ
React.memoã䜿çšããŠã³ã³ããŒãã³ããã¡ã¢åããäžèŠãªåã¬ã³ããªã³ã°ãé²ããŸããReact.memoã¯ãã³ã³ããŒãã³ãã®ãããããæµ ãæ¯èŒããããããã倿Žãããå Žåã«ã®ã¿åã¬ã³ããªã³ã°ããŸãã - useMemo ãš useCallbackïŒ
useMemoããã³useCallbackããã¯ã䜿çšããŠãé«äŸ¡ãªèšç®ãšé¢æ°ãã¡ã¢åããŸããããã«ãããäžèŠãªåã¬ã³ããªã³ã°ãé²ããããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã - ã³ãŒãåå²ïŒã³ãŒããå°ããªãã£ã³ã¯ã«åå²ãããªã³ããã³ãã§ããŒãããŸããããã«ãããåæããŒãæéãççž®ããã¢ããªã±ãŒã·ã§ã³å šäœã®ããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã
- ä»®æ³åïŒä»®æ³åææ³ã䜿çšããŠã倧éã®ããŒã¿ãªã¹ããå¹ççã«ã¬ã³ããªã³ã°ããŸããä»®æ³åã¯ããªã¹ãã®è¡šç€ºãããŠããé ç®ã®ã¿ãã¬ã³ããªã³ã°ãããããããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããããšãã§ããŸãã
ã°ããŒãã«ãªèæ ®äºé
ã°ããŒãã«ãªãªãŒãã£ãšã³ã¹åãã® React ã¢ããªã±ãŒã·ã§ã³ãéçºããå Žåãåœéå (i18n) ãšããŒã«ã©ã€ãŒãŒã·ã§ã³ (l10n) ãèæ ®ããããšãéèŠã§ããããã«ã¯ãã¢ããªã±ãŒã·ã§ã³ãããŸããŸãªèšèªãæåãå°åã«é©å¿ãããããšãå«ãŸããŸãã
åœéåãšããŒã«ã©ã€ãŒãŒã·ã§ã³ã®æŠç¥
- æååã®å€éšåïŒãã¹ãŠã®ããã¹ãæååãå€éšãã¡ã€ã«ã«ä¿åãããŠãŒã¶ãŒã®ãã±ãŒã«ã«åºã¥ããŠåçã«ããŒãããŸãã
- i18n ã©ã€ãã©ãªã®äœ¿çšïŒ
react-i18nextãFormatJSã®ãã㪠i18n ã©ã€ãã©ãªã䜿çšããŠãããŒã«ã©ã€ãŒãŒã·ã§ã³ãšãã©ãŒããããåŠçããŸãã - è€æ°ã®ãã±ãŒã«ã®ãµããŒãïŒè€æ°ã®ãã±ãŒã«ããµããŒããããŠãŒã¶ãŒãåžæã®èšèªãšå°åãéžæã§ããããã«ããŸãã
- æ¥ä»ãšæå»ã®åœ¢åŒã®åŠçïŒããŸããŸãªå°åã«é©ããæ¥ä»ãšæå»ã®åœ¢åŒã䜿çšããŸãã
- å³ããå·Šãžã®èšèªã®èæ ®ïŒã¢ã©ãã¢èªãããã©ã€èªã®ãããªå³ããå·Šãžã®èšèªããµããŒãããŸãã
- ç»åãšã¡ãã£ã¢ã®ããŒã«ã©ã€ãºïŒç»åãšã¡ãã£ã¢ã®ããŒã«ã©ã€ãºãããããŒãžã§ã³ãæäŸããŠãã¢ããªã±ãŒã·ã§ã³ãããŸããŸãªå°åã§æåçã«é©åã§ããããšã確èªããŸãã
çµè«
React ã®ãããæŽæ°ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããããšãã§ãã匷åãªæé©åææ³ã§ãããã ãããããåŠçãã©ã®ããã«æ©èœããããããã³ç¶æ 倿Žã®ç«¶åã广çã«è§£æ±ºããæ¹æ³ãçè§£ããããšãäžå¯æ¬ ã§ãã颿°åæŽæ°ã䜿çšããç¶æ ãªããžã§ã¯ããæ³šææ·±ãããŒãžããé忿޿°ãæ£ããåŠçããããšã§ãReact ã¢ããªã±ãŒã·ã§ã³ãäºæž¬å¯èœã§ãä¿å®å¯èœã§ãããã©ãŒãã³ã¹ãé«ãããšãä¿èšŒã§ããŸããç¶æ æŽæ°ããžãã¯ã培åºçã«ãã¹ãããããšãå¿ãããã°ããŒãã«ãªãªãŒãã£ãšã³ã¹åãã«éçºããéã«ã¯åœéåãšããŒã«ã©ã€ãŒãŒã·ã§ã³ãèæ ®ããŠãã ããããããã®ã¬ã€ãã©ã€ã³ã«åŸãããšã§ãäžçäžã®ãŠãŒã¶ãŒã®ããŒãºãæºãããå ç¢ã§ã¹ã±ãŒã©ãã«ãª React ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸãã